/*
 * Copyright (C) 2010 Juan José Ortilles jortilles@gmail.com
 *
 * This program is free software; you can redistribute it and/or modify it 
 * under the terms of the GNU General Public License as published by the Free 
 * Software Foundation; either version 3 of the License, or 
 * any later version.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * 
 * See the GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along 
 * with this program; if not, write to the Free Software Foundation, Inc., 
 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
 *
 */

package net.juantxu.pentaho.launcher;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.util.Locale;
import java.util.Properties;
import java.util.ResourceBundle;

import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

import net.juantxu.pentaho.launcher.ejecutores.EjecutaAdminConsole;
import net.juantxu.pentaho.launcher.ejecutores.EjecutaAggregationDesinger;
import net.juantxu.pentaho.launcher.ejecutores.EjecutaBIServer;
import net.juantxu.pentaho.launcher.ejecutores.EjecutaDataIntegration;
import net.juantxu.pentaho.launcher.ejecutores.EjecutaDesignStudio;
import net.juantxu.pentaho.launcher.ejecutores.EjecutaMetadata;
import net.juantxu.pentaho.launcher.ejecutores.EjecutaReportDesinger;
import net.juantxu.pentaho.launcher.ejecutores.EjecutaWeka;
import net.juantxu.pentaho.launcher.ejecutores.EjecutaWorkbench;
import net.juantxu.pentaho.launcher.utilidades.CargaProperties;
import net.juantxu.pentaho.launcher.utilidades.EscribeProperties;

import org.apache.log4j.Logger;

public class PentahoLauncherGUI extends JFrame {

	private static final long serialVersionUID = 1L;
	TextArea explicacion;
	static Logger log = Logger.getLogger(PentahoLauncher.class);
	ResourceBundle messages;
	boolean bloqueado = false;
	Properties pr = null;
	boolean extendido = false;

	public PentahoLauncherGUI() {
		pr = new CargaProperties().Carga();
		extendido = largoOcorto();
		i18(pr.getProperty("idioma"), pr.getProperty("pais"));
		// inicializo la ventana
		montaVentana();
		if (pr.getProperty("coprobarAlInicio").equals("true")) {
			CompruebaAplicaciones cp = new CompruebaAplicaciones();
			cp.comprueba();
		}

	}
	private void montaVentana(){
		if (extendido){
			setSize(550, 400);
			}else{
				setSize(200, 400);
			}
			setLocation(50, 50);
			setTitle(messages.getString("titulo"));
			setIconImage(new ImageIcon("icons/pl.png").getImage());
			//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			addWindowListener(new WindowAdapter() {
			      public void windowClosing(WindowEvent e) {

			    		log.debug("Cerrando la aplicacion");
						log.debug("borrando los archivos temporales");
						File f = new File("tmprun.bat");
						if (f.exists()){f.delete();}
						f= new File("tmprunagg.bat");
						if (f.exists()){f.delete();}
						f= new File("tmprunbi.bat");
						if (f.exists()){f.delete();}
						f= new File("tmprupac.bat");
						if (f.exists()){f.delete();}
						f= new File("tmprunstopbi.bat");
						if (f.exists()){f.delete();}
						f= new File("tmprunweka.bat");
						if (f.exists()){f.delete();}
						f= new File("tmprunpac.bat");
						if (f.exists()){f.delete();}
			        System.exit(0);
			      }
			    });
			montaContenido();
			setJMenuBar(montaMenu(messages));
			pack();
			setVisible(true);
	}

	private void i18(String idioma, String pais) {
		Locale currentLocale;
		currentLocale = new Locale(idioma, pais);
		messages = ResourceBundle.getBundle("mensajes", currentLocale);
		// si hay que actualizar el idioma por defecto
	}

	private void montaContenido() {

		// formulario
		Font titulo = new Font("Dialog", Font.BOLD, 18);
		Font etiquetas = new Font("Dialog", Font.PLAIN, 16);
		JLabel arriba = new JLabel(messages.getString("baner"));
		arriba.setFont(titulo);
		explicacion = new TextArea(messages.getString("explicacion"), 0, 0,
				TextArea.SCROLLBARS_VERTICAL_ONLY);
		explicacion.setEditable(false);

		// Etiquetas
		JLabel etiquetaPanelK = new JLabel(messages.getString("lpdi"));
		etiquetaPanelK.setFont(etiquetas);
		JLabel etiquetaPanelW = new JLabel(messages.getString("lworkbench"));
		etiquetaPanelW.setFont(etiquetas);
		JLabel etiquetaPanelM = new JLabel(messages.getString("lmetadata"));
		etiquetaPanelM.setFont(etiquetas);
		JLabel etiquetaPanelR = new JLabel(messages.getString("lrd"));
		etiquetaPanelR.setFont(etiquetas);
		JLabel etiquetaPanelS = new JLabel(messages.getString("lds"));
		etiquetaPanelS.setFont(etiquetas);
		JLabel etiquetaPanelWeka = new JLabel(messages.getString("lw"));
		etiquetaPanelWeka.setFont(etiquetas);
		JLabel etiquetaPanelAggregation = new JLabel(messages.getString("laggregation"));
		etiquetaPanelAggregation.setFont(etiquetas);

		// SERVERS
		JLabel etiquestaPanelBI = new JLabel(messages.getString("lbi"));
		etiquestaPanelBI.setFont(etiquetas);
		JLabel etiquestaPanelAC = new JLabel(messages.getString("lac"));
		etiquestaPanelAC.setFont(etiquetas);

		// Botones
		// -------------------------------------------------------------------
		// Kettle

		Icon iconoK = new ImageIcon("icons/pdi.png");

		JButton botonK = new JButton(messages.getString("bpdi"), iconoK);
		class Oyentek implements ActionListener {
			public void actionPerformed(ActionEvent e) {

				log.debug("lanzando data integration");
				bloqueado = true;
				EjecutaDataIntegration di = new EjecutaDataIntegration();
				int resultado = di.lanza();
				bloqueado = false;
				if (resultado == 0) {
					actExpl("spdi");
				} else if (resultado == 7) {
					actExpl("errAppNoTa");
				} else {
					actExpl("errApp");
				}
			}
		}
		botonK.addActionListener(new Oyentek());
		botonK.addMouseListener(new MouseAdapter() {
			// On mouse over...
			public void mouseEntered(MouseEvent e) {
				actExpl("epdi");
			}
		});

		// wokrbench
		Icon iconoW = new ImageIcon("icons/mondrian.png");
		JButton botonW = new JButton(messages.getString("bworkbench"), iconoW);
		class OyenteW implements ActionListener {
			public void actionPerformed(ActionEvent e) {
				log.debug("lanzando workbench");
				bloqueado = true;
				EjecutaWorkbench lw = new EjecutaWorkbench();
				int resultado = lw.lanza();
				bloqueado = false;
				if (resultado == 0) {
					actExpl("sworkbench");
				} else if (resultado == 7) {
					actExpl("errAppNoTa");
				} else {
					actExpl("errApp");
				}

			}
		}
		botonW.addActionListener(new OyenteW());
		botonW.addMouseListener(new MouseAdapter() {
			// On mouse over...
			public void mouseEntered(MouseEvent e) {
				actExpl("eworkbench");
			}
		});
		
		// Aggregation desinger
		Icon iconoAgg = new ImageIcon("icons/mondrian.png");
		JButton botonAgg = new JButton(messages.getString("baggregation"), iconoAgg);
		class OyenteAgg implements ActionListener {
			public void actionPerformed(ActionEvent e) {
				log.debug("lanzando Aggregatioin");
				bloqueado = true;
				
				EjecutaAggregationDesinger lw = new EjecutaAggregationDesinger();
				int resultado = lw.lanza();
				bloqueado = false;
				if (resultado == 0) {
					actExpl("saggregation");
				} else if (resultado == 7) {
					actExpl("errAppNoTa");
				} else {
					actExpl("errApp");
				}

			}
		}
		botonAgg.addActionListener(new OyenteAgg());
		botonAgg.addMouseListener(new MouseAdapter() {
			// On mouse over...
			public void mouseEntered(MouseEvent e) {
				actExpl("eaggregation");
			}
		});
		

		// Metadata
		JButton botonM = new JButton(messages.getString("bmetadata"), iconoW);
		class OyenteM implements ActionListener {
			public void actionPerformed(ActionEvent e) {
				log.debug("lanzando Metadata");
				bloqueado = true;
				EjecutaMetadata lm = new EjecutaMetadata();
				int resultado = lm.lanza();
				bloqueado = false;
				if (resultado == 0) {
					actExpl("smetadata");
				} else if (resultado == 7) {
					actExpl("errAppNoTa");
				} else {
					actExpl("errApp");
				}

			}
		}
		botonM.addActionListener(new OyenteM());
		botonM.addMouseListener(new MouseAdapter() {
			// On mouse over...
			public void mouseEntered(MouseEvent e) {
				actExpl("emetadata");
			}
		});

		// Pentaho Report Desinger
		Icon iconoR = new ImageIcon("icons/prd.png");
		JButton botonR = new JButton(messages.getString("brd"), iconoR);
		class OyenteR implements ActionListener {
			public void actionPerformed(ActionEvent e) {
				EjecutaReportDesinger lrd = new EjecutaReportDesinger();
				log.debug("lanzando Report Desinger");
				bloqueado = true;
				int resultado = lrd.lanza();
				bloqueado = false;
				if (resultado == 0) {
					actExpl("srd");
				} else if (resultado == 7) {
					actExpl("errAppNoTa");
				} else {
					actExpl("errApp");
				}

			}
		}
		botonR.addActionListener(new OyenteR());
		botonR.addMouseListener(new MouseAdapter() {
			// On mouse over...
			public void mouseEntered(MouseEvent e) {
				actExpl("erd");

			}
		});

		// Pentaho Design Studio
		Icon iconoS = new ImageIcon("icons/pds.png");
		JButton botonS = new JButton(messages.getString("bds"), iconoS);

		class OyenteS implements ActionListener {
			public void actionPerformed(ActionEvent e) {
				EjecutaDesignStudio lds = new EjecutaDesignStudio();
				log.debug("lanzando Design Studio");
				bloqueado = true;
				int resultado = lds.lanza();
				bloqueado = false;
				if (resultado == 0) {
					actExpl("sds");
				} else if (resultado == 7) {
					actExpl("errAppNoTa");
				} else {
					actExpl("errApp");
				}
			}
		}
		botonS.addActionListener(new OyenteS());
		botonS.addMouseListener(new MouseAdapter() {
			// On mouse over...
			public void mouseEntered(MouseEvent e) {
				actExpl("eds");
			}
		});

		// Weka
		Icon iconoweka = new ImageIcon("icons/weka.png");
		JButton botonWeka = new JButton(messages.getString("bw"), iconoweka);

		class OyenteWeka implements ActionListener {
			public void actionPerformed(ActionEvent e) {
				EjecutaWeka lww = new EjecutaWeka();
				log.debug("lanzando Weka");
				bloqueado = true;
				int resultado = lww.lanza();
				bloqueado = false;
				if (resultado == 0) {
					actExpl("sw");
				} else if (resultado == 7) {
					actExpl("errAppNoTa");
				} else {
					actExpl("errApp");
				}

			}
		}
		botonWeka.addActionListener(new OyenteWeka());
		botonWeka.addMouseListener(new MouseAdapter() {
			// On mouse over...
			public void mouseEntered(MouseEvent e) {
				actExpl("ew");
			}
		});

		// Pentaho BI Server
		Icon iconobi = new ImageIcon("icons/puc.png");
		JButton botonBI = new JButton(messages.getString("bbi"), iconobi);
		class OyenteBI implements ActionListener {
			public void actionPerformed(ActionEvent e) {
				int res = 0;
				log.debug("lanzando Bi Server");
				actExpl("eebi");
				bloqueado = true;
				EjecutaBIServer lbi = new EjecutaBIServer();
				res = lbi.lanza();
				bloqueado = false;
				if (res != 0) {
					actExpl("erbi");
				}
				if (res == 3) {
					actExpl("java_home");
				}
				if (res == 5) {
					actExpl("jre");
				}
				if (res == 7) {
					actExpl("errAppNoTa");
				}

			}
		}
		botonBI.addActionListener(new OyenteBI());
		botonBI.addMouseListener(new MouseAdapter() {
			// invoked when mouse enters the form
			public void mouseEntered(MouseEvent e) {
				actExpl("ebi");
			}
		});

		// Bi Stop
		JButton botonBIStop = new JButton(messages.getString("sbi"), iconobi);
		class OyenteBIS implements ActionListener {
			public void actionPerformed(ActionEvent e) {
				int res = 0;
				log.debug("Parando Admin Console");
				actExpl("pbi");
				bloqueado = true;
				EjecutaBIServer lbi = new EjecutaBIServer();
				res = lbi.Para();
				bloqueado = false;
				if (res != 0) {
					actExpl("erpbi");
				}
				if (res == 3) {
					actExpl("java_home");
				}
				if (res == 5) {
					actExpl("jre");
				}
				if (res == 7) {
					actExpl("errAppNoTa");
				}

			}
		}
		botonBIStop.addActionListener(new OyenteBIS());
		botonBIStop.addMouseListener(new MouseAdapter() {
			// invoked when mouse enters the form
			public void mouseEntered(MouseEvent e) {
				actExpl("sbi");
			}
		});


		Icon iconoac = new ImageIcon("icons/admin_console.png");
		// Pentaho Admin Console
		JButton botonAC = new JButton(messages.getString("bac"), iconoac);
		class OyenteAC implements ActionListener {
			public void actionPerformed(ActionEvent e) {
				int res = 0;
				log.debug("lanzando Admin Console");
				actExpl("eeac");
				bloqueado = true;
				EjecutaAdminConsole lac = new EjecutaAdminConsole();
				res = lac.lanza();
				bloqueado = false;
				if (res != 0) {
					actExpl("erac");
				}
				if (res == 3) {
					actExpl("java_home");
				}
				if (res == 5) {
					actExpl("jre");
				}
				if (res == 7) {
					actExpl("errAppNoTa");
				}

			}
		}
		botonAC.addActionListener(new OyenteAC());
		botonAC.addMouseListener(new MouseAdapter() {
			// iOn mouse Over
			public void mouseEntered(MouseEvent e) {
				actExpl("eac");
			}
		});

		/*
		 * Stop Admin Console
		 */
		JButton botonACStop = new JButton(messages.getString("sac"), iconoac);
		class OyenteACS implements ActionListener {
			public void actionPerformed(ActionEvent e) {
				int res = 0;
				log.debug("Parando Admin Console");
				actExpl("pac");
				bloqueado = true;
				EjecutaAdminConsole lac = new EjecutaAdminConsole();
				res = lac.Para();
				bloqueado = false;
				if (res != 0) {
					actExpl("erpac");
				}
				if (res == 3) {
					actExpl("java_home");
				}
				if (res == 5) {
					actExpl("jre");
				}
				if (res == 7) {
					actExpl("errAppNoTa");
				}
			}
		}
		botonACStop.addActionListener(new OyenteACS());
		botonACStop.addMouseListener(new MouseAdapter() {
			// on mouse over
			public void mouseEntered(MouseEvent e) {
				actExpl("sac");
			}
		});


		
		
		JPanel p1 = new JPanel();
		
		if (extendido){
			p1.setLayout(new GridLayout(7, 2));
		}else{
			p1.setLayout(new GridLayout(3, 2));
		}
		p1.add(etiquetaPanelK);
		p1.add(botonK);
		p1.add(etiquetaPanelW);
		p1.add(botonW);
		if (extendido){
			p1.add(etiquetaPanelAggregation);
			p1.add(botonAgg);
			p1.add(etiquetaPanelM);
			p1.add(botonM);
		}


		p1.add(etiquetaPanelR);
		p1.add(botonR);
		if (extendido){
			p1.add(etiquetaPanelS);
			p1.add(botonS);
			p1.add(etiquetaPanelWeka);
			p1.add(botonWeka);
		}
		JPanel p2 = new JPanel();
		if (extendido){
			p2.setLayout(new GridLayout(2, 3));
		}else{
			p2.setLayout(new GridLayout(1, 3));
		}
		p2.add(etiquestaPanelBI);
		p2.add(botonBI);
		p2.add(botonBIStop);
		if (extendido){
		p2.add(etiquestaPanelAC);
		p2.add(botonAC);
		p2.add(botonACStop);
		}
		JPanel panel = new JPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

		panel.add(p1);
		panel.add(p2);

		add(arriba, BorderLayout.NORTH);
		add(panel, BorderLayout.CENTER);
		add(explicacion, BorderLayout.SOUTH);
	}

	private JMenuBar montaMenu(final ResourceBundle messages) {

		JMenuBar menuBar = new JMenuBar();
		// menu 1
		JMenu menu = new JMenu(messages.getString("menu"));
		// menu de idioma
		JMenu submenu = new JMenu(messages.getString("idioma"));
		JMenuItem espanol = new JMenuItem(messages.getString("espanol"));
		submenu.add(espanol);
		JMenuItem catala = new JMenuItem(messages.getString("catala"));
		submenu.add(catala);
		menu.add(submenu);
		JMenuItem ingles = new JMenuItem(messages.getString("ingles"));
		submenu.add(ingles);
		menu.add(submenu);
		// el resto
		JMenuItem buscaUpdate = new JMenuItem(messages.getString("buscaUpdate"));
		menu.add(buscaUpdate);
		JMenuItem actualizaExtras = new JMenuItem(messages.getString("actualizaExtras"));
		menu.add(actualizaExtras);
		JMenuItem ayuda = new JMenuItem(messages.getString("ayuda"));
		menu.add(ayuda);
		JMenuItem sobre = new JMenuItem(messages.getString("sobre"));
		menu.add(sobre);
		JMenuItem salir = new JMenuItem(messages.getString("salir"));
		menu.add(salir);
		/*
		 * Los listeners
		 */

		// poniendo un listener a idioma espanyol
		espanol.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("Cambiando el idioma a espanyol");
				cambiaIdioma("es", "ES");
				refresca();
			}
		});
		// poniendo un listener a idioma catala
		catala.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("Cambiando el idioma  a catala");
				cambiaIdioma("ca", "ES");
				refresca();
			}
		});
		// poniendo un listener a idioma ingles
		ingles.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("Cambiando el idioma  al ingles");
				cambiaIdioma("en", "GB");
				refresca();
			}
		});
		/*
		 * ayuda
		 */
		ayuda.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("ayuda");

				actExpl("explicacionAyuda");

			}
		});
		/*
		 * sobre
		 */
		sobre.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("sobre");
				actExpl("eplicacionSobre");
			}
		});
		/*
		 * salir
		 */
		// poniendo un listener a salir
		salir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("Saliendo por el menu");
				
				log.debug("borrando los archivos temporales");
				File f = new File("tmprun.bat");
				if (f.exists()){f.delete();}
				f= new File("tmprunagg.bat");
				if (f.exists()){f.delete();}
				f= new File("tmprunbi.bat");
				if (f.exists()){f.delete();}
				f= new File("tmprupac.bat");
				if (f.exists()){f.delete();}
				f= new File("tmprunstopbi.bat");
				if (f.exists()){f.delete();}
				f= new File("tmprunweka.bat");
				if (f.exists()){f.delete();}
				f= new File("tmprunpac.bat");
				if (f.exists()){f.delete();}
				
				System.exit(0);
			}
		});

		/*
		 * buscaUpdate
		 */
		// poniendo un listener a buscaUpdate
		buscaUpdate.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("Buscando - revisando las aplicaciones");
				CompruebaAplicaciones cp = new CompruebaAplicaciones();
				cp.comprueba();
			}
		});

		/*
		 * actualizaExtras
		 */
		// poniendo un listener a actualizaExtras
		actualizaExtras.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("Actualizando Extras");
				actExpl("infoExtraInit");
				bloqueado = true;
				new DescargaEInstalaPentahoApp("extra");
				bloqueado = false;
				actExpl("infoExtraFin");
				
			}
		});		
		
		
		menuBar.add(menu);
		// menu documentacion

		// añado el menu a la barra.

		// menu documetnacion
		JMenu menuDoc = new JMenu(messages.getString("menuDoc"));

		// menu de documentacion de kettle
		JMenu submenuKettle = new JMenu(messages.getString("submenuKettle"));
		JMenuItem kettleDoc = new JMenuItem(messages.getString("kettleDoc"));
		JMenuItem kettleWeb = new JMenuItem(messages.getString("kettleWeb"));
		JMenuItem kettleForo = new JMenuItem(messages.getString("kettleForo"));
		submenuKettle.add(kettleDoc);
		submenuKettle.add(kettleWeb);
		submenuKettle.add(kettleForo);
		menuDoc.add(submenuKettle);

		// menu de documentacion de Workbench
		JMenu submenuWorkbench = new JMenu(messages
				.getString("submenuWorkbench"));
		JMenuItem workbenchDoc = new JMenuItem(messages
				.getString("workbenchDoc"));
		JMenuItem workbenchWeb = new JMenuItem(messages
				.getString("workbenchWeb"));
		JMenuItem workbenchForo = new JMenuItem(messages
				.getString("workbenchForo"));
		submenuWorkbench.add(workbenchDoc);
		submenuWorkbench.add(workbenchWeb);
		submenuWorkbench.add(workbenchForo);
		menuDoc.add(submenuWorkbench);
		
		
		//menu de documentación de aggregation designer
		JMenu submenuAggregation = new JMenu(messages
				.getString("submenuAggregation"));
		JMenuItem aggregationDoc = new JMenuItem(messages
				.getString("aggregationDoc"));
		JMenuItem aggregationWeb = new JMenuItem(messages
				.getString("aggregationWeb"));
		JMenuItem aggregationForo = new JMenuItem(messages
				.getString("aggregationForo"));
		submenuAggregation.add(aggregationDoc);
		submenuAggregation.add(aggregationWeb);
		submenuAggregation.add(aggregationForo);
		menuDoc.add(submenuAggregation);

		// menu de documentacion de metadata
		JMenu submenuMetadata = new JMenu(messages.getString("submenuMetadata"));
		// JMenuItem metadataDoc = new
		// JMenuItem(messages.getString("metadataDoc"));
		JMenuItem metadataWeb = new JMenuItem(messages.getString("metadataWeb"));
		JMenuItem metadataForo = new JMenuItem(messages
				.getString("metadataForo"));
		// submenuMetadata.add(metadataDoc);
		submenuMetadata.add(metadataWeb);
		submenuMetadata.add(metadataForo);
		menuDoc.add(submenuMetadata);

		// menu de documentacion de Report Designer
		JMenu submenuReporting = new JMenu(messages
				.getString("submenuReporting"));
		// JMenuItem reportingDoc = new
		// JMenuItem(messages.getString("reportingDoc"));
		JMenuItem reportingWeb = new JMenuItem(messages
				.getString("reportingWeb"));
		JMenuItem reportingForo = new JMenuItem(messages
				.getString("reportingForo"));
		// submenuReporting.add(reportingDoc);
		submenuReporting.add(reportingWeb);
		submenuReporting.add(reportingForo);
		menuDoc.add(submenuReporting);
		// menu de documentacion de Desing Studio
		JMenu submenuDS = new JMenu(messages.getString("submenuDS"));
		JMenuItem DSWeb = new JMenuItem(messages.getString("DSWeb"));
		submenuDS.add(DSWeb);
		menuDoc.add(submenuDS);
		// menu de documentacion de WEKA
		JMenu submenuWeka = new JMenu(messages.getString("submenuWeka"));
		JMenuItem wekaDoc = new JMenuItem(messages.getString("WekaDoc"));
		JMenuItem wekaWeb = new JMenuItem(messages.getString("WekaWeb"));
		JMenuItem wekaForo = new JMenuItem(messages.getString("WekaForo"));
		submenuWeka.add(wekaDoc);
		submenuWeka.add(wekaWeb);
		submenuWeka.add(wekaForo);
		menuDoc.add(submenuWeka);
		// menu del bi server
		JMenu submenuBIS = new JMenu(messages.getString("submenuBIS"));
		JMenuItem BISWeb = new JMenuItem(messages.getString("BISWeb"));
		JMenuItem BISForo = new JMenuItem(messages.getString("BISForo"));
		submenuBIS.add(BISWeb);
		submenuBIS.add(BISForo);
		menuDoc.add(submenuBIS);

		// los listeners
		// poniendo un listener a kettle doc
		kettleDoc.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("Kettle Doc");
				int res = new MuestraDocumentacion().doc("kettle");
				log.debug("exito:" + res);
			}
		});
		// poniendo un listener a kettle web
		kettleWeb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("Kettle Web");
				int res = new MuestraDocumentacion().web("kettle");
				log.debug("exito:" + res);
			}
		});
		// poniendo un listener a kettle wiki
		kettleForo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("Kettle kettleWiki");
				int res = new MuestraDocumentacion().foro("kettle");
				log.debug("exito:" + res);
			}
		});

		// poniendo un listener a workbench doc
		workbenchDoc.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("workbenchDoc Doc");
				int res = new MuestraDocumentacion().doc("workbench");
				log.debug("exito:" + res);
			}
		});
		// poniendo un listener a workbench web
		workbenchWeb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("workbench Web");
				int res = new MuestraDocumentacion().web("workbench");
				log.debug("exito:" + res);
			}
		});
		// poniendo un listener a workbench wiki
		workbenchForo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("workbench Wiki");
				int res = new MuestraDocumentacion().foro("workbench");
				log.debug("exito:" + res);
			}
		});

		

		// poniendo un listener a aggregation doc
		aggregationDoc.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("aggregation Doc");
				int res = new MuestraDocumentacion().doc("aggregation");
				log.debug("exito:" + res);
			}
		});
		// poniendo un listener a aggregation web
		aggregationWeb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("aggratagion Web... ");
				int res = new MuestraDocumentacion().web("aggregationWeb");
				log.debug("exito:" + res);
			}
		});
		// poniendo un listener a aggregation wiki
		aggregationForo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("workbench Wiki");
				int res = new MuestraDocumentacion().foro("workbench");
				log.debug("exito:" + res);
			}
		});

		
		
		// poniendo un listener a metadata web
		metadataWeb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("metadata Web");
				int res = new MuestraDocumentacion().web("metadata");
				log.debug("exito:" + res);
			}
		});
		// poniendo un listener a workbench wiki
		metadataForo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("metadata kettleWiki");
				int res = new MuestraDocumentacion().foro("metadata");
				log.debug("exito:" + res);
			}
		});

		// poniendo un listener a reporting doc
		/*
		 * reportingDoc.addActionListener(new ActionListener() { public void
		 * actionPerformed(ActionEvent arg0) { log.debug("reporting Doc"); int
		 * res =new MuestraDocumentacion().doc("reporting"); log.debug("exito:"
		 * + res); } });
		 */
		// poniendo un listener a workbench web
		reportingWeb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("reporting Web");
				int res = new MuestraDocumentacion().web("reporting");
				log.debug("exito:" + res);
			}
		});
		// poniendo un listener a workbench wiki
		reportingForo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("reporting Wiki");
				int res = new MuestraDocumentacion().foro("reporting");
				log.debug("exito:" + res);
			}
		});

		// poniendo un listener a DS web
		DSWeb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("DS Web");
				int res = new MuestraDocumentacion().web("DS");
				log.debug("exito:" + res);
			}
		});

		// poniendo un listener a weka
		wekaDoc.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("weka Doc");
				int res = new MuestraDocumentacion().doc("weka");
				log.debug("exito:" + res);
			}
		});
		// poniendo un listener a weka web
		wekaWeb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("Kettle Web");
				int res = new MuestraDocumentacion().web("weka");
				log.debug("exito:" + res);
			}
		});
		// poniendo un listener a weka wiki
		wekaForo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("Kettle kettleWiki");
				int res = new MuestraDocumentacion().foro("weka");
				log.debug("exito:" + res);
			}
		});

		// poniendo un listener a bis web
		BISWeb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("bis Web");
				int res = new MuestraDocumentacion().web("bis");
				log.debug("exito:" + res);
			}
		});
		// poniendo un listener a bis foro
		BISForo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("Kettle kettleWiki");
				int res = new MuestraDocumentacion().foro("bis");
				log.debug("exito:" + res);
			}
		});

		menuBar.add(menuDoc);
		
		
		
		// menu largo compacto
		JMenu menuCompacto = new JMenu(messages.getString(   pr.getProperty("tipoListado") ));
		JMenuItem listadoExtendido = new JMenuItem(messages.getString("menuExtendido" ));
		JMenuItem listadoCompacto = new JMenuItem(messages.getString("menuCompacto"));
		
		// poniendo un listener al listando extendido
		listadoExtendido.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("listado extendido");
				extendido= true;
				new EscribeProperties("tipoListado", "menuExtendido");
				refresca();
				
			}
		});
		// poniendo un listener al listado compacto
		listadoCompacto.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				log.debug("listado copmacto");
				extendido= false;
				new EscribeProperties("tipoListado", "menuCompacto");
				refresca();
			}
		});
		menuCompacto.add(listadoExtendido);
		menuCompacto.add(listadoCompacto);
		menuBar.add(menuCompacto);
		return menuBar;
	}
	
	private void refresca(){
	this.dispose();
	new PentahoLauncherGUI();
	}
	private void cambiaIdioma(String idioma, String pais) {
		bloqueado = false;
		actExpl("explicacionIdioma" + idioma + pais);
		new EscribeProperties("idioma", idioma);
		new EscribeProperties("pais", pais);
		log.debug("idioma cambiado");
		bloqueado = true;

	}

	private void actExpl(String clave) {
		if (!bloqueado) {
			explicacion.setText(messages.getString(clave));
			
		}

	}

	private boolean largoOcorto(){
		if ( pr.getProperty("tipoListado").equals("menuCompacto") ) {
			return false;
		}else{
			return true;
		}
		
	}
	
}